package org.wenhuayuan.uilibrary.refresh;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.FrameLayout;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import org.wenhuayuan.hiapplib.util.HiDisplayUtil;

/**
 * 下拉刷新的OverLayout(header)视图，
 * 可以通过继承HiOverView自定义
 */
public abstract class HiOverView extends FrameLayout {
    public enum HiRefreshState {
        /**初始态*/
        STATE_INIT,
        /**header 展示的状态*/
        STATE_VISIBLE,
        /**超出可刷新距离的刷新状态*/
        STATE_REFRESH,
        /**超出可刷新距离的状态*/
        STATE_OVER,
        /**超出可刷新距离的松开手后的状态*/
        STATE_OVER_RELEASE
    }

    protected HiRefreshState mState = HiRefreshState.STATE_INIT; // 初始值
    /**触发下拉刷新的最小距离*/
    protected int mPullRefreshHeight;

    protected float minDamp = 1.6f; // 最小阻尼
    protected float maxDamp = 3.6f; // 最大阻尼


    public HiOverView(@NonNull Context context) {
        super(context);
        preInit();
    }

    public HiOverView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        preInit();
    }

    public HiOverView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        preInit();
    }

    public void preInit() {
        mPullRefreshHeight = HiDisplayUtil.dp2px(66, getResources());
        init();
    }

    public HiRefreshState getState() {
        return mState;
    }

    public void setState(HiRefreshState mState) {
        this.mState = mState;
    }

    public abstract void init(); // 初始化
    public abstract void onScroll(int scrollY, int pullRefreshHeight); // 滚动回调
    public abstract void onVisible(); // 视图层可见时，回调
    public abstract void onOverPull(); // 超过视图层可刷新最小高度，松手后回调
    public abstract void onRefresh(); // 正在刷新的方法
    public abstract void onFinish(); // 结束刷新的方法
}
